package client.comm.commlib.utils;

import android.content.Context;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.widget.Toast;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class StringUtil {
    /**
     * 判断文件是否是特定格式
     *
     * @param path
     * @param foramtStr
     * @return
     */
    public static boolean isFormatTrue(String path, String foramtStr) {
        int lastDot = path.lastIndexOf(".");
        if (lastDot < 0)
            return false;
        String foramtStrGet = path.substring(lastDot + 1).toLowerCase();//toUpperCase全部字符变为大写，返回新字符串
        return foramtStr.trim().equals(foramtStr.trim());
    }

    /**
     * 判断密码
     *
     * @param newPwd
     * @param context
     * @return
     */
    public static boolean isPwdFormat(String newPwd, Context context) {
        boolean isPwd = true;
//        判断密码是否包含数字：包含返回1，不包含返回0
        int i = newPwd.matches(".*\\d+.*") ? 1 : 0;

//        判断密码是否包含字母：包含返回1，不包含返回0
        int j = newPwd.matches(".*[a-zA-Z]+.*") ? 1 : 0;

//        判断密码是否包含特殊符号(~!@#$%^&*()_+|<>,.?/:;'[]{}\)：包含返回1，不包含返回0
        int k = newPwd.matches(".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*") ? 1 : 0;

//        判断密码长度是否在6-16位
        int l = newPwd.length();

//        判断密码中是否包含用户名
//        boolean contains = newPwd.contains(userId);

        if (i + j + k < 2 || l < 6 || l > 16) {
            isPwd = false;
            if (i + j + k < 2) {
                Toast.makeText(context, "您的密码格式不正确", Toast.LENGTH_SHORT).show();
            }
            if (l < 6 || l > 16) {
                Toast.makeText(context, "您的密码长度应该小于6位大约16位", Toast.LENGTH_SHORT).show();
            }
        }

        return isPwd;
    }

    /**
     * 判断是否手机号
     *
     * @param phones
     * @return
     */
    public static boolean isPhoneNum(String phones) {
        if (TextUtils.isEmpty(phones)) {
            return false;
        }
        phones = phones.replaceAll("，", ",");
        String[] phoneAarry = phones.split(",");
        for (String phone : phoneAarry) {
            if (TextUtils.isEmpty(phone)) {
                continue;
            }
            if (phone.length() != 11) {
                return false;
            }
        }
        return true;
    }

    /**
     * 检查手机号是否合法
     *
     * @param context
     * @param phones
     * @return
     */
    public static boolean checkPhone(Context context, String phones) {
        if (TextUtils.isEmpty(phones)) {
            Toast.makeText(context, "请输入手机号", Toast.LENGTH_LONG).show();
            return false;
        }
        phones = phones.replaceAll("，", ",");
        String[] phoneAarry = phones.split(",");
        for (String phone : phoneAarry) {
            if (TextUtils.isEmpty(phone)) {
                continue;
            }
            if (phone.length() != 11) {
                Toast.makeText(context, "手机号" + phone + "长度不正确", Toast.LENGTH_LONG).show();
                return false;
            }
        }
        return true;
    }

    /**
     * 验证字符串是否符合手机号格式
     *
     * @param str 需要验证的字符串
     * @return 不是手机号返回false，是手机号就返回true
     */
    public static boolean isMobile(String str) {

        return str.length() == 11;
//		return str != null && str.matches("^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$");
    }

    /**
     * 判断是否为null或空值
     *
     * @param str String
     * @return true or false
     */
    public static boolean isNullOrEmpty(String str) {
        return str == null || str.length() == 0 || str.toLowerCase().equals("null") || (str.length() > 0 && str.trim().length() == 0);
    }


    /**
     * 截取第一个字符串
     *
     * @return
     */
    public static String getImageFirst(String url,String split) {
        if (url == null) {
            return "";
        }
        return url.split(split)[0];
    }

    /**
     * 根据;截取字符串变成list集合
     *
     * @return
     */
    public static List<String> getListStr(String str,String split) {
        List<String> list = new ArrayList<String>();

        if (!StringUtil.isNullOrEmpty(str)) {
            if (str.contains(split)) {
                String[] strArr = str.split(split);
                if (strArr != null && strArr.length > 0) {
                    for (int i = 0; i < strArr.length; i++) {
                        list.add(strArr[i].trim());
                    }
                } else {
                    list.add(str.trim());
                }
            } else {
                list.add(str.trim());
            }
        }
        return list;
    }
    /**
     * 根据;截取字符串变成list集合
     *
     * @return
     */
    public static boolean isContains(String str,String current,String split) {
        List<String> list = new ArrayList<String>();

        if (!StringUtil.isNullOrEmpty(str)) {
            if (str.contains(split)) {
                String[] strArr = str.split(split);
                if (strArr != null && strArr.length > 0) {
                    for (int i = 0; i < strArr.length; i++) {
                        list.add(strArr[i].trim());
                    }
                } else {
                    list.add(str.trim());
                }
            } else {
                list.add(str.trim());
            }
        }
        if(list!=null&&list.size()>0){
            if(list.contains(current)){
                return true;
            }
        }
        return false;
    }

    /**
     * 根据;截取字符串变成list集合
     *
     * @return
     */
    public static List<String> getListSplit(String str, String splitStr) {
        List<String> list = new ArrayList<String>();

        if (!StringUtil.isNullOrEmpty(str)) {
            if (str.contains(splitStr)) {
                String[] strArr = str.split(splitStr);
                if (strArr != null && strArr.length > 0) {
                    for (int i = 0; i < strArr.length; i++) {
                        list.add(strArr[i]);
                    }
                } else {
                    list.add(str);
                }
            } else {
                list.add(str);
            }
        }
        return list;
    }

    public static boolean isNumeric(String str) {
        if (str == null) {
            return false;
        }
        int sz = str.length();
        for (int i = 0; i < sz; i++) {
            if (Character.isDigit(str.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }
    public static String money(double number) {
        String str = "";
//        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        BigDecimal bigDecimal = new BigDecimal(number).setScale(2, BigDecimal.ROUND_HALF_UP);
        str = bigDecimal.toString();
//        }else{
//            DecimalFormat df = new DecimalFormat("#0.00");
//            df.setRoundingMode(RoundingMode.HALF_UP);
//            float folatStr=Float.valueOf(str);
//            str=df.format(folatStr);
//        }

//        if(str.indexOf(".") > 0){
//            //正则表达
//            str = str.replaceAll("0+?$", "");//去掉后面无用的零
//            str = str.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
//        }

        return str;
    }
    public static String money(String number) {
        if (StringUtil.isNullOrEmpty(number)) {
            return number;
        }
        String str = "";
//        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        BigDecimal bigDecimal = new BigDecimal(number).setScale(2, BigDecimal.ROUND_HALF_UP);
        str = bigDecimal.toString();
//        }else{
//            DecimalFormat df = new DecimalFormat("#0.00");
//            df.setRoundingMode(RoundingMode.HALF_UP);
//            float folatStr=Float.valueOf(str);
//            str=df.format(folatStr);
//        }

        if(str.indexOf(".") > 0){
            //正则表达
            str = str.replaceAll("0+?$", "");//去掉后面无用的零
            str = str.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
        }

        return str;
    }

    /**
     * 搜索关键字变色
     *
     * @param color
     * @param text
     * @param keyword
     * @return
     */
    public static SpannableString searchTitle(int color, String text, String keyword) {
        String string = text.toLowerCase();
        String key = keyword.toLowerCase();
        Pattern pattern = Pattern.compile(key);
        Matcher matcher = pattern.matcher(string);
        SpannableString ss = new SpannableString(text);
        while (matcher.find()) {
            int start = matcher.start();
            int end = matcher.end();
            ss.setSpan(new ForegroundColorSpan(color), start, end,
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return ss;
    }

    /**
     * 将double转为数值，并最多保留num位小数。例如当num为2时，1.268为1.27，1.2仍为1.2；1仍为1，而非1.00;100.00则返回100。
     *
     * @param d
     * @param num 小数位数
     * @return
     */
    public static String double2String(double d, int num) {
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(num);//保留两位小数
        nf.setGroupingUsed(false);//去掉数值中的千位分隔符

        String temp = nf.format(d);
        if (temp.contains(".")) {
            String s1 = temp.split("\\.")[0];
            String s2 = temp.split("\\.")[1];
            for (int i = s2.length(); i > 0; --i) {
                if (!s2.substring(i - 1, i).equals("0")) {
                    return s1 + "." + s2.substring(0, i);
                }
            }
            return s1;
        }
        return temp;
    }
    /**
     * 将double转为数值，并最多保留num位小数。例如当num为2时，1.268为1.27，1.2仍为1.2；1仍为1，而非1.00;100.00则返回100。
     *
     * @param num 小数位数
     * @return
     */
    public static String double2StringStr(String dStr, int num) {
        if(StringUtil.isNullOrEmpty(dStr)){
            dStr="0";
        }
        double d=Double.valueOf(dStr);
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(num);//保留两位小数
        nf.setGroupingUsed(false);//去掉数值中的千位分隔符

        String temp = nf.format(d);
        if (temp.contains(".")) {
            String s1 = temp.split("\\.")[0];
            String s2 = temp.split("\\.")[1];
            for (int i = s2.length(); i > 0; --i) {
                if (!s2.substring(i - 1, i).equals("0")) {
                    return s1 + "." + s2.substring(0, i);
                }
            }
            return s1;
        }
        return temp;
    }

    /**
     * 将double转为数值，并最多保留num位小数。
     *
     * @param d
     * @param num      小数个数
     * @param defValue 默认值。当d为null时，返回该值。
     * @return
     */
    public static String double2String(Double d, int num, String defValue) {
        if (d == null) {
            return defValue;
        }

        return double2String(d, num);
    }

    public static String addNToString(String str) {
        String strFormat = "";
        if (!StringUtil.isNullOrEmpty(str)) {
            for (int i = 0; i < str.length(); i++) {
                if (!StringUtil.isNullOrEmpty("" + str.charAt(i))) {
                    if (i != str.length() - 1) {
                        strFormat = strFormat + str.charAt(i) + "\n";
                    } else {
                        strFormat = strFormat + str.charAt(i);
                    }
                }
            }
        }
        return strFormat;
    }

    public static String doubleNoZreo(double d) {
        String s = String.valueOf(d);
        String newD = s.substring(0, s.indexOf("."));
        return newD;
    }

    /**
     * 版本号比较
     *
     * @param version1
     * @param version2
     * @return 0代表相等，1代表version1大于version2，-1代表version1小于version2
     */
    public static int compareVersion(String version1, String version2) {
        if (isNullOrEmpty(version2)) {
            return 0;
        }
        if (version1.equals(version2)) {
            return 0;
        }
        String[] version1Array = version1.split("\\.");
        String[] version2Array = version2.split("\\.");
        int index = 0;
        // 获取最小长度值
        int minLen = Math.min(version1Array.length, version2Array.length);
        int diff = 0;
        // 循环判断每位的大小
        while (index < minLen
                && (diff = Integer.parseInt(version1Array[index])
                - Integer.parseInt(version2Array[index])) == 0) {
            index++;
        }
        if (diff == 0) {
            // 如果位数不一致，比较多余位数
            for (int i = index; i < version1Array.length; i++) {
                if (Integer.parseInt(version1Array[i]) > 0) {
                    return 1;
                }
            }

            for (int i = index; i < version2Array.length; i++) {
                if (Integer.parseInt(version2Array[i]) > 0) {
                    return -1;
                }
            }
            return 0;
        } else {
            return diff > 0 ? 1 : -1;
        }
    }

    public static String hideTrueName(String text) {
        if (TextUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(text.substring(0, 1));
        for (int i = 1; i < text.length() ; i++) {
            sb.append("*");
        }
        return sb.toString();
    }
    public static String hideNickName(String text) {
        if (TextUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(text.substring(0, 1));
        sb.append("**");
        if(text.length()>1){
            sb.append(text.substring(text.length()-1, text.length()));
        }
        return sb.toString();
    }
    public static String hideEmail(String text) {
        if (TextUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(text.substring(0, 3));
        sb.append("****");
        sb.append(text.substring(text.length() - 3, text.length()));
        return sb.toString();
    }

    public static String hidePhone(String text) {
        if (TextUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(text.substring(0, 3));
        sb.append("****");
        sb.append(text.substring(text.length() -4, text.length()));
        return sb.toString();
    }

    public static String hideCard(String text) {
        if (TextUtils.isEmpty(text)) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(text.substring(0, 4));
        sb.append("**** **** *****");
        sb.append(text.substring(text.length() - 3, text.length()));
        return sb.toString();
    }

    /**
     * 格式化为两位小数
     *
     * @param num
     * @return
     */
    public static String formatDouble(double num) {
        java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
        return df.format(num);
    }

    /**
     * 格式化为一位小数
     *
     * @param num
     * @return
     */
    public static String formatDouble2(double num) {
        java.text.DecimalFormat df = new java.text.DecimalFormat("#0.0");
        return df.format(num);
    }

    /**
     * 获取整数位
     * @param strFrom
     * @return
     */
    public static String setMoney(String strFrom) {

        double number = 0;
        try {
            number = Double.valueOf(strFrom);
        } catch (Exception e) {
            number = 0;
        }
        String str = "";
//        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        BigDecimal bigDecimal = new BigDecimal(number).setScale(2, BigDecimal.ROUND_HALF_UP);
        str = bigDecimal.toString();


        String[] strs = str.split("\\.");

        return strs[0];
    }

    /**
     * 获取小数位数
     * @param strFrom
     * @return
     */

    public static String setMoneyPoint(String strFrom) {

        double number = 0;
        try {
            number = Double.valueOf(strFrom);
        } catch (Exception e) {
            number = 0;
        }
        String str = "";
//        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
        BigDecimal bigDecimal = new BigDecimal(number).setScale(2, BigDecimal.ROUND_HALF_UP);
        str = bigDecimal.toString();


        String[] strs = str.split("\\.");

        String strReturn=strs[1];
        if (strReturn.endsWith("0")) {
            return strReturn.substring(0,strReturn.length()-1);
        }
        return strReturn;
    }


    /**
     * 大V值显示
     * @param credits
     * @return
     */
    public static String bigNumShow(double credits) {
        BigDecimal bigDecimal=new BigDecimal(credits);
        if(credits>10000){
            bigDecimal.movePointLeft(4);
            return double2String(bigDecimal.doubleValue(),2)+"万";
        }else{

            return double2String(bigDecimal.doubleValue(),2);
        }
    }
}
